An operating system typically has several application programming interfaces that allow applications to access functionality supported by the operating system. Such APIs are typically specified by an operating system using a named file or object in a computer programming language. For example, the C programming language uses header files that may have a name such as “interface.h”. Similarly, in C# a mechanism called “P/Invoke” signatures is used to access operating system APIs. A person writing a computer program that will make use of an operating system API typically includes a reference to a named API file or object in the program, or uses another mechanism provided by the programming language. That program, for example, then includes calls to functions defined by that API, in the syntax used by that API.
APIs defined in this manner cannot be directly accessed by languages other than the languages they are written in. To be made accessible to programs written in other languages, APIs are “wrapped.” This wrapping typically has to be done manually per API and per language and requires deep understanding of both the target language and the API and operating system. Consequently, many operating system APIs are unavailable.